#ifndef COMPONENTE_H_
#define COMPONENTE_H_

#include <string>
#include <sstream>
#include "Clave.h"

using namespace std;

namespace Toolkit
{

enum TipoSerializacion
{
    BINARIO, TEXTO
}; //TODO pasar a includes.h

class Componente
{
public:
    Componente(const TipoSerializacion);
    virtual ~Componente();

    virtual void serializar(stringstream&) const = 0;
    virtual void hidratar(stringstream&) = 0;

    virtual bool operator <(const Clave&) const = 0;
    virtual bool operator ==(const Clave&) const = 0;

    virtual Componente* nuevaInstancia() const = 0;

    virtual char getTipo() const = 0;

protected:
    TipoSerializacion tSerializacion;
};

}

#endif /* COMPONENTE_H_ */
